// pages/publish/publish.js
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    title: '',
    description: '',
    price: '',
    originalPrice: '',
    category: '',
    condition: '',
    uploadedImages: [], // 存储上传后的图片信息
    tempFiles: [], // 存储临时文件路径
    categories: ['电子产品', '书籍', '服装', '生活用品', '其他'], // 分类选项
    conditions: ['全新', '9成新', '8成新', '7成新', '6成新以下'], // 新旧程度选项
    showCategoryPicker: false, // 控制分类选择器显示
    showConditionPicker: false // 控制成色选择器显示
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 选择图片
  async chooseImages() {
    try {
      const res = await wx.chooseImage({
        count: 9 - this.data.tempFiles.length,
        sizeType: ['compressed'],
        sourceType: ['album', 'camera']
      })

      this.setData({
        tempFiles: [...this.data.tempFiles, ...res.tempFilePaths]
      })
    } catch (error) {
      console.error('选择图片失败：', error)
    }
  },

  // 上传图片
  async uploadImages() {
    if (this.data.tempFiles.length === 0) {
      return wx.showToast({ title: '请选择图片', icon: 'none' })
    }

    wx.showLoading({ title: '上传中...' })

    try {
      const token = wx.getStorageSync('token')
      const uploadPromises = this.data.tempFiles.map(filePath => {
        return new Promise((resolve, reject) => {
          wx.uploadFile({
            url: `${app.globalData.baseUrl}/api/upload/multiple`,
            filePath,
            name: 'images',
            header: {
              'Authorization': `Bearer ${token}`
            },
            success: (res) => {
              try {
                const data = JSON.parse(res.data)
                console.log('单张图片上传返回：', data)
                resolve(data)
              } catch (error) {
                console.error('解析响应数据失败：', error, res.data)
                reject(error)
              }
            },
            fail: (error) => {
              console.error('上传请求失败：', error)
              reject(error)
            }
          })
        })
      })

      const results = await Promise.all(uploadPromises)
      console.log('所有图片上传结果：', results)

      // 处理返回的图片数据
      const uploadedImages = []
      results.forEach(result => {
        if (result.success && result.data && result.data.urls) {
          // 遍历 urls 数组
          result.data.urls.forEach(url => {
            uploadedImages.push({
              url: url,
              // 从 URL 中提取文件名
              filename: url.split('/').pop(),
              // 由于返回数据中没有这些信息，可以省略或设置默认值
              size: 0,
              mimetype: 'image/png'
            })
          })
        }
      })

      if (uploadedImages.length === 0) {
        throw new Error('没有图片上传成功')
      }

      console.log('处理后的图片数据：', uploadedImages)

      this.setData({ uploadedImages })
      wx.hideLoading()
      return true
    } catch (error) {
      console.error('上传图片失败：', error)
      wx.hideLoading()
      wx.showToast({
        title: '上传图片失败：' + (error.message || '未知错误'),
        icon: 'none',
        duration: 2000
      })
      return false
    }
  },

  // 删除图片
  removeImage(e) {
    const index = e.currentTarget.dataset.index
    const tempFiles = [...this.data.tempFiles]
    const uploadedImages = [...this.data.uploadedImages]

    tempFiles.splice(index, 1)
    uploadedImages.splice(index, 1)

    this.setData({ tempFiles, uploadedImages })
  },

  // 发布商品
  async publishProduct() {
    // 表单验证
    if (!this.validateForm()) return

    // 先上传图片
    const uploadSuccess = await this.uploadImages()
    if (!uploadSuccess) return

    // 构造商品数据
    const formData = {
      title: this.data.title,
      description: this.data.description,
      price: this.data.price,
      originalPrice: this.data.originalPrice,
      category: this.data.category,
      condition: this.data.condition,
      // 只发送图片URL
      images: this.data.uploadedImages.map(img => ({
        url: img.url
      }))
    }

    try {
      console.log('发送的数据：', formData)

      // 使用Promise方式处理wx.request
      const result = await new Promise((resolve, reject) => {
        wx.request({
          url: 'http://localhost:3000/api/products',
          method: 'POST',
          data: formData,
          header: {
            'Authorization': `Bearer ${wx.getStorageSync('token')}`,
            'Content-Type': 'application/json'
          },
          success: (res) => {
            console.log('请求响应数据:', res.data)
            resolve(res.data)
          },
          fail: (err) => {
            reject(err)
          }
        })
      })

      if (result.success) {
        // 清空表单数据
        this.setData({
          title: '',
          description: '',
          price: '',
          originalPrice: '',
          category: '',
          condition: '',
          uploadedImages: [],
          tempFiles: []
        })

        wx.showToast({
          title: '发布成功',
          icon: 'success',
          success: () => {
            setTimeout(() => {
              wx.switchTab({ url: '/pages/home/home' })
            }, 1500)
          }
        })
      } else {
        throw new Error(result.message || '发布失败')
      }
    } catch (error) {
      console.error('发布商品失败：', error.message)
      wx.showToast({
        title: error.message || '发布失败',
        icon: 'none'
      })
    }
  },

  // 表单验证
  validateForm() {
    const { title, description, price, originalPrice, category, condition, tempFiles } = this.data

    if (!title) {
      wx.showToast({ title: '请输入商品标题', icon: 'none' })
      return false
    }
    if (!description) {
      wx.showToast({ title: '请输入商品描述', icon: 'none' })
      return false
    }
    if (!price || price <= 0) {
      wx.showToast({ title: '请输入有效的售价', icon: 'none' })
      return false
    }
    if (!originalPrice || originalPrice <= 0) {
      wx.showToast({ title: '请输入有效的原价', icon: 'none' })
      return false
    }
    if (!category) {
      wx.showToast({ title: '请选择商品分类', icon: 'none' })
      return false
    }
    if (!condition) {
      wx.showToast({ title: '请选择商品成色', icon: 'none' })
      return false
    }
    if (tempFiles.length === 0) {
      wx.showToast({ title: '请至少上传一张图片', icon: 'none' })
      return false
    }
    return true
  },

  // 输入处理方法
  onInput(e) {
    const { field } = e.currentTarget.dataset
    this.setData({
      [field]: e.detail.value
    })
  },

  // 选择器改变处理方法
  onPickerChange(e) {
    const { field } = e.currentTarget.dataset
    this.setData({
      [field]: this.data[`${field}s`][e.detail.value]
    })
  },

  // 显示分类选择器
  showCategoryPicker() {
    this.setData({
      showCategoryPicker: true
    })
  },

  // 关闭分类选择器
  onCategoryPickerClose() {
    this.setData({
      showCategoryPicker: false
    })
  },

  // 确认分类选择
  onCategoryPickerConfirm(e) {
    this.setData({
      category: e.detail.value,
      showCategoryPicker: false
    })
  },

  // 显示成色选择器
  showConditionPicker() {
    this.setData({
      showConditionPicker: true
    })
  },

  // 关闭成色选择器
  onConditionPickerClose() {
    this.setData({
      showConditionPicker: false
    })
  },

  // 确认成色选择
  onConditionPickerConfirm(e) {
    this.setData({
      condition: e.detail.value,
      showConditionPicker: false
    })
  },

  // 预览图片
  previewImage(e) {
    const current = e.currentTarget.dataset.url
    wx.previewImage({
      current,
      urls: this.data.tempFiles
    })
  }
})